home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / dsp / dr.bub / 96000.lha / 96000 / appb / b123.asm < prev    next >
Assembly Source File  |  1992-04-28  |  7KB  |  131 lines

  1. ; This program was originally published in the Motorola DSP96002 Users Manual
  2. ; and is provided under a DISCLAIMER OF WARRANTY available from Motorola DSP
  3. ; Operation, 6501 William Cannon Drive West, Austin, Texas 78735-8598.  For
  4. ; more information, refer to the DSP96002 Users Manual, Appendix B, DSP
  5. ; Benchmarks.
  6. ;
  7. ; B.1.23    N Point 3x3 2-D FIR Convolution  
  8. ;The two dimensional FIR uses a 3x3 coefficient mask:  
  9. ;      c(1,1) c(1,2) c(1,3) 
  10. ;      c(2,1) c(2,2) c(2,3) 
  11. ;      c(3,1) c(3,2) c(3,3) 
  12. ;
  13. ;Stored in Y memory in the order:  
  14. ;c(1,1), c(1,2), c(1,3), c(2,1), c(2,2), c(2,3), c(3,1), c(3,2), c(3,3) 
  15. ;
  16. ;The image is an array of 512x512 pixels.  To provide boundary conditions  for the FIR filtering, the 
  17. ;image is surrounded by a set of zeros such  that the image is actually stored as a 514x514 array. i.e.  
  18. ;                  514                          
  19. ;                                               
  20. ;         ...       0          ...                 
  21. ;                                                  
  22. ;                                           .      
  23. ;   .             512                       .      
  24. ;   .                                       .    514 
  25. ;   0                                       0      
  26. ;   .      Image Area               512     .      
  27. ;   .                                       .      
  28. ;                                                  
  29. ;                                                  
  30. ;                                                  
  31. ;         ...       0          ...                 
  32. ;                                                  
  33. ;
  34. ;The image (with boundary) is stored in row major storage.  The first  element of the array image(,) is 
  35. ;image(1,1) followed by image(1,2).  The last element of the first row is image(1,514) followed by the  
  36. ;beginning of the next column image(2,1).  These are stored sequentially  in the array "im" in X memo-
  37. ;ry.  
  38. ;Image(1,1) maps to index 0, image(1,514) maps to index 513,  Image(2,1) maps to index 514 (row 
  39. ;major storage).  
  40. ;Although many other implementations are possible, this is a realistic  type of image environment 
  41. ;where the actual size of the image may not be  an exact power of 2.  Other possibilities include stor-
  42. ;ing a 512x512  image but computing only a 511x511 result, computing a 512x512 result  without 
  43. ;boundary conditions but throwing away the pixels on the border,  etc.  
  44. ;    r0  ?image(n,m)        image(n,m+1)       image(n,m+2) 
  45. ;    r1  ?image(n+514,m)    image(n+514,m+1)   image(n+514,m+2) 
  46. ;    r2  ?image(n+2*514,m)  image(n+2*514,m+1) image(n+2*514,m+2) 
  47. ;    r4  ?FIR coefficients 
  48. ;    r5  ?output image 
  49. ;
  50. ;                                          DSP56000 IMPLEMENTATION 
  51. ;                                                            Program    ICycles
  52. ;                                                            Words 
  53. ;  move     #mask,r4            ;point to coefficients        1      1 
  54. ;  move     #8,m4               ;mod 9                        1      1 
  55. ;  move     #image,r0           ;top boundary                 1      1 
  56. ;  move     #image+514,r1       ;left of first pixel          1      1 
  57. ;  move     #image+2*514,r2     ;left of first pixel 2nd row  1      1 
  58. ;  move     #2,n1               ;adjustment for end of row    1      1 
  59. ;  move     n1,n2                                             1      1 
  60. ;  move     #imageout,r5        ;output image                 1      1 
  61. ;  move     x:(r0)+,x0   y:(r4)+,y0 ;first element, c(1,1)    1      1 
  62. ;  do       #512,_rows                                        2      3 
  63. ;  do       #512,_cols                                        2      3 
  64. ;  mpy  x0,y0,a  x:(r0)+,x0  y:(r4)+,y0 ;c(1,2)               1      1 
  65. ;  mac  x0,y0,a  x:(r0)-,x0  y:(r4)+,y0 ;c(1,3)               1      1 
  66. ;  mac  x0,y0,a  x:(r1)+,x0  y:(r4)+,y0 ;c(2,1)               1      1 
  67. ;  mac  x0,y0,a  x:(r1)+,x0  y:(r4)+,y0 ;c(2,2)               1      1 
  68. ;  mac  x0,y0,a  x:(r1)-,x0  y:(r4)+,y0 ;c(2,3)               1      1 
  69. ;  mac  x0,y0,a  x:(r2)+,x0  y:(r4)+,y0 ;c(3,1)               1      1 
  70. ;  mac  x0,y0,a  x:(r2)+,x0  y:(r4)+,y0 ;c(3,2)               1      1 
  71. ;  mac  x0,y0,a  x:(r2)-,x0  y:(r4)+,y0 ;c(3,3)               1      1 
  72. ;  macr x0,y0,a  x:(r0)+,x0  y:(r4)+,y0 ;preload, get c(1,1)  1      1 
  73. ;  move                      a,y:(r5)+  ;output image sample  1      1 
  74. ;_rows 
  75. ;; adjust pointers for frame boundary 
  76. ;  move   x:(r0)+,x0   y:(r5)+,y1 ;adj r0,r5 w/dummy loads    1      1 
  77. ;  move   x:(r1)+n1,x0 y:(r5)+,y1 ;adj r1,r5 w/dummy loads    1      1 
  78. ;  move   (r2)+n2                 ;adj r2                     1      1 
  79. ;  move   x:(r0)+,x0              ;preload for next pass      1      1 
  80. ;_cols 
  81. ;                                                            ---    --- 
  82. ;                                                             28       
  83. ;                                      (Kernel=10N),  10N2 +7N+12   ? 
  84. ;
  85. ;                                      DSP96002 IMPLEMENTATION 
  86. ;                                                            Program    ICycles
  87. ;                                                            Words 
  88.   move     #mask,r4            ;point to coefficients             1    1 
  89.   move     #8,m4               ;mod 9                             1    1 
  90.   move     #image,r0           ;top boundary                      1    1 
  91.   move     #image+514,r1       ;left of first pixel               1    1 
  92.   move     #image+2*514,r2     ;left of first pixel 2nd row       1    1 
  93.  
  94.   move     #2,n1               ;adjustment for end of row         1    1 
  95.   move     n1,n2                                              ;    1    1 
  96.  
  97.   move     #imageout,r5        ;output image                      1    1 
  98.  
  99.   move             x:(r0)+,d4.s y:(r4)+,d5.s ;preload, get c(1,1); 1    1 
  100.   fmpy.s d4,d5,d0  x:(r0)+,d4.s y:(r4)+,d6.s ;get c(1,2)         ; 1    1 
  101.   do    #512,_rows                                               ; 2    3 
  102.   do    #512,_cols                                               ; 2    3 
  103.   fmpy.s d4,d6,d1              x:(r0)-,d4.s y:(r4)+,d5.s ;c(1,3) ; 1    1 
  104.   fmpy   d4,d5,d0 fadd.s d0,d1 x:(r1)+,d4.s y:(r4)+,d5.s ;c(2,1) ; 1    1 
  105.   fmpy   d4,d5,d0 fadd.s d0,d1 x:(r1)+,d4.s y:(r4)+,d5.s ;c(2,2) ; 1    1 
  106.   fmpy   d4,d5,d0 fadd.s d0,d1 x:(r1)-,d4.s y:(r4)+,d5.s ;c(2,3) ; 1    1 
  107.   fmpy   d4,d5,d0 fadd.s d0,d1 x:(r2)+,d4.s y:(r4)+,d5.s ;c(3,1) ; 1    1 
  108.   fmpy   d4,d5,d0 fadd.s d0,d1 x:(r2)+,d4.s y:(r4)+,d5.s ;c(3,2) ; 1    1 
  109.   fmpy   d4,d5,d0 fadd.s d0,d1 x:(r2)-,d4.s y:(r4)+,d5.s ;c(3,3) ; 1    1 
  110.   fmpy   d4,d5,d0 fadd.s d0,d1 x:(r0)+,d4.s y:(r4)+,d5.s ;c(1,1) ; 1    1 
  111.   fmpy   d4,d5,d0 fadd.s d0,d1 x:(r0)+,d4.s y:(r4)+,d6.s ;c(1,2) ; 1    1 
  112.   move                                      d1.s,y:(r5)+ ;output ; 1    1 
  113. _cols 
  114.   move                      x:(r0)+,d4.s y:(r5)+,d7.s ;adj r0,r5 ; 1    1 
  115.   move                      x:(r0)+,d4.s y:(r5)+,d7.s ;load,aj r5; 1    1 
  116.   fmpy.s d4,d5,d0             (r1)+n1                            ; 1    1 
  117.   move                        (r2)+n2                            ; 1    1 
  118.   move                      x:(r0)+,d4.s          ;load          ; 1    1 
  119. _rows 
  120. ;                                                              ; ----------
  121. ;                                                      Totals:    29      
  122. ;                                                 (Kernel=10N), 10N2 +8N+13   ? 
  123. ;
  124.